package cn.larry.aop.config.aspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect // 必须是Spring bean，否则无法自动代理。
@Component
public class DemoAspect {

	/**
	 * 定义了一个pointcut：pointcut expression；signature。
	 */
	@Pointcut("execution(* find*(*))")
	public void transfer() {
	}

	/**
	 * 任意public方法。
	 */
	@Pointcut("execution(public * *(..))")
	public void anyPublicOperation() {
	}

	/**
	 * 特定包路径下的所有方法？？？
	 */
	@Pointcut("within(cn.larry.aop..within..*)")
	public void within() {
	}

	/**
	 * 所有的hey()。
	 */
	@Pointcut("execution(* hey(*))")
	public void hey() {
	}

	/**
	 * 同时满足两个条件
	 */
//	@Pointcut("within() && hey()")
//	public void tradingOperation() {
//	}

	/**
	 * bean！！！
	 */
	@Pointcut("bean(*Service)")
	public void bean() {
	}
}
